package com.ecomm.util.struts;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 基本的Action类，所有的action都必须从此类继承并实现 mainExcecute() 方法！

 * preExcecute       用于sesssion失效检查（统一的，也可以添加其它功能）
 * mainExcecute     在子类中必须实现的方法，完成处理逻辑
 * postExecute       在子类中可以覆盖的方法 ，譬如用于统计分析  （属于扩展方法）
 * User:  fjj
 * Date: 2004-3-10
 * Time: 16:39:28
 * To change this template use Options | File Templates.
 */
public abstract class BaseAction extends Action
{

    /**
     * action的执行方法

     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws Exception
    {

        ActionForward forward = preExcecute(mapping, form, request, response);
        if (forward != null)
        {
            return forward;
        }

        forward = mainExecute(mapping, form, request, response);
        postExecute(mapping, form, request, response);
        return forward;
    }


    /**
     * 执行mainExcecute前调用的方法 ，在此添加需要统一处理的逻辑（譬如session失效）

     * 如果不需要统一处理或有特殊处理，在子类中override即可
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    protected ActionForward preExcecute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
    {
        return null;
    }


    /**
     * 我们的类需要实现的方法
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     * @throws Exception
     */
    protected abstract ActionForward mainExecute(ActionMapping mapping,
                                                 ActionForm form,
                                                 HttpServletRequest request,
                                                 HttpServletResponse response) throws Exception;


    /**
     * 执行mainExcecute后调用的方法 ，在此添加需要统一处理的逻辑
     * 如果不需要统一处理或有特殊处理，在子类中override即可
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @throws Exception
     */
    protected void postExecute(ActionMapping mapping,
                               ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) throws Exception
    {
        //添加需要统一处理的方法

    }

}
